package com.app.DTO;

import java.io.Serializable;
import java.util.ArrayList;

import android.util.Log;

import com.app.Controller.ReadWriteFileController;
import com.app.PhanQuyen.Quyen;

public class RoleDTO implements Serializable{

	private String name;
	private ArrayList<Quyen> ruleList;

	public RoleDTO(){
		this.ruleList=new ArrayList<Quyen>();
	}
	public RoleDTO(String name, ArrayList<Quyen> ruleList){
		this.ruleList=ruleList;
		this.name=name;
	}
	
	public ArrayList<Quyen> getRuleList() {
		return ruleList;
	}

	public void setRuleList(ArrayList<Quyen> ruleList) {
		this.ruleList = ruleList;
	}
	
	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}
	public void addRule(Quyen rule){
		this.ruleList.add(rule);
	}
	public void removeRule(int index){
		this.ruleList.remove(index);
	}
	
	@Override
	public String toString(){
//		String rs="";
//		int n=this.ruleList.size();
//		for(int i=0;i<n;i++){
//			rs+=this.ruleList.get(i).getID();
//			rs+=" "+this.ruleList.get(i).getName();
//			rs+=" read: "+this.ruleList.get(i).getRead();
//			rs+=" write: "+this.ruleList.get(i).getWrite();
//			rs+=" write: "+this.ruleList.get(i).getSend();
//			rs+=" receive: "+this.ruleList.get(i).getRead();
//			rs+="\n";
//		}
//		
//		
//		return rs;
		return this.name;
	}
	public String toParse(){
		String s=name+"#";
		int n=this.ruleList.size();
		for(int i=0;i<n;i++){
			
		}
		return s;
			
	}
	/**
	 * Tạo chuỗi String từ danh sách Role để gửi đi
	 
	 * @param listRole Danh sách các role
	 * @return String
	 * Dữ liệu bao gồm: tên role, mã các quyền của role đó
	 * Các role cách nhau bởi dấu ;
	 * Các mã Quyền các nhau bởi dấu ,
	 * Role và quyền của nó cách nhau bởi dấu :
	 * Ví dụ: 
	 * 			roleA có các quyền 1,2,3
	 * 			roleB có các quyền 4,5
	 *return--> roleA:1,2,3;roleB:4,5
	 */
	public static String toStringList(ArrayList<RoleDTO> listRole){
		String rs="";
		
		int n=listRole.size();
		for(int i=0;i<n;i++){
			rs+=listRole.get(i).getName()+":";
			int m=listRole.get(i).getRuleList().size();
			for(int j=0;j<m;j++){
				rs+=listRole.get(i).getRuleList().get(j).getID()+",";
			}
			rs+=";";
		}
		return rs;
	}
	/**
	 * Tạo danh sách role từ chuỗi định dạng sẵn
	 * @param data Chuỗi chứa role
	 * @param pathOfRuleBase đường dẫn tới file xml chứa các quyền cơ bản
	 * @return Arraylist<RoleDTO>
	 */
	public static ArrayList<RoleDTO> parseList(String data, String pathOfRuleBase){
		Log.d("Phu","parse:"+data);
		ArrayList<RoleDTO> roleList=new ArrayList<RoleDTO>();
		String []roleArray=data.split(";");
		ArrayList<Quyen> ruleList=ReadWriteFileController.readRule(pathOfRuleBase);
		
		for(int i=0;i<roleArray.length;i++){
			RoleDTO role=new RoleDTO();
			String []part=roleArray[i].split(":");
			role.setName(part[0]);
			
			String []ruleArray=part[1].split(",");
			for(int j=0;j<ruleArray.length;j++){
				role.addRule(ruleList.get(Integer.parseInt(ruleArray[j])));
			}
			roleList.add(role);
		}
		return roleList;
	}
}
